home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 August / PC Plus Super CD (Issue 106) (PCP106) (August 1995).iso / ability / disk1 / setup.mst < prev    next >
Encoding:
Text File  |  1995-05-30  |  51.7 KB  |  1,527 lines

  1. ''$DEFINE DEBUG  ''Define for script development/debugging
  2.  
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5. '$INCLUDE 'msregdb.inc'
  6.  
  7. '$DEFINE UK
  8. ''                       UK
  9.  
  10. CONST LOGO                = 1         ''Bitmap ID
  11.  
  12. ''Dialog ID's
  13. CONST WELCOMEDLG                         = 100
  14. CONST ASKQUIT                           = 200
  15. CONST DESTPATH                          = 300
  16. CONST EXITFAILURE                       = 400
  17. CONST PRODUCTIDDLG                      = 500
  18. CONST EXITQUIT                           = 600
  19. CONST EXITSUCCESS                        = 700
  20. CONST OPTIONS                            = 800
  21. CONST TOOLSOPTIONS                       = 801
  22. CONST APPHELP                            = 900
  23. CONST BADPATHDLG                        = 6400
  24. CONST BEGIN                             = 6100
  25. CONST CUSTINST                          = 6200
  26. CONST TOOBIGDLG                         = 6500
  27. CONST INFORMATION                       = 7500
  28. CONST CONFIRM                                                                           = 7700
  29.  
  30. CONST COMPLETESETUP         =   1
  31. CONST CUSTOMSETUP           =   2
  32. CONST MINIMUMSETUP          =   3
  33.  
  34. CONST MANAGERFILES     = 1
  35. CONST WRITEFILES       = 2
  36. CONST DBFILES          = 3
  37. CONST SPREADFILES      = 4
  38. CONST FORMSFILES       = 5
  39. CONST COMMSFILES       = 6
  40. CONST TOOLSFILES       = 7
  41. CONST APPFILES         = 8
  42. CONST SYSTEMFILES      = 9
  43. CONST EXAMPLESFILES    = 1
  44. CONST FILTERSFILES     = 2
  45. CONST SETUP_MSG$       = "Ability for Windows Setup"
  46.  
  47. ''Disk cost list symbols
  48. CONST APPNEEDS$         = "Ability"
  49. CONST MANAGERNEEDS$     = "Manager"
  50. CONST WRITENEEDS$       = "Write"
  51. CONST DBNEEDS$          = "Database"
  52. CONST SPREADNEEDS$      = "Spreadsheet"
  53. CONST FORMSNEEDS$       = "Forms"
  54. CONST COMMSNEEDS$       = "Comms"
  55. CONST TOOLSNEEDS$       = "Tools"
  56. CONST SYSTEMNEEDS$      = "System"
  57. CONST EXAMPLESNEEDS$   = "Examples"
  58. CONST FILTERSNEEDS$    = "Filters"
  59.  
  60. ''Dialog list symbol names
  61. CONST CHECKSTATES$                              = "CheckItemsState"
  62. CONST STATUSTEXT$                               = "StatusItemsText"
  63. CONST DRIVETEXT$                                = "DriveStatusText"
  64. CONST EXTRACOSTS$                               = "ExtraCosts"  ''List of extra costs to add per drive
  65. CONST BIGLIST$                                  = "BigList"     ''List of option files cost calc results (boolean)
  66. CONST ORG_STR$                                  = "OrgOut"
  67. CONST NAME_STR$                                 = "NameOut"
  68. CONST CONFIRMTEXTLIST$  = "ConfirmTextIn"
  69. CONST EXTRACOSTS1$      = "ExtraCosts1"
  70. CONST BIGLIST1$         = "BigList1"
  71. CONST CHECKSTATES1$     = "CheckItemsState1"
  72. CONST STATUSTEXT1$      = "StatusItemsText1"
  73. CONST DRIVETEXT1$       = "DriveStatusText1"
  74.  
  75. ''Dialog Proc Names
  76. CONST FMODELESSDLGPROC$ = "FModelessDlgProc"
  77. CONST HELPPROC$ = "FHelpDlgProc"               ''Help dialog procedure
  78.  
  79. GLOBAL CUIDLL$
  80. GLOBAL DEST$                                   ''Default destination directory.
  81. GLOBAL WinDrive$
  82. GLOBAL  WINDIRECTORY$
  83. GLOBAL OPTCUR$                                 ''Option selection from option dialog.
  84. GLOBAL PathToShare$
  85. GLOBAL Check%
  86. GLOBAL szUserName$
  87. GLOBAL szCompany$
  88. GLOBAL szProductID$
  89. GLOBAL CURRENTMODULE%
  90.  
  91. GLOBAL WriteExamples%
  92. GLOBAL WriteW4W%
  93. GLOBAL DBExamples%
  94. GLOBAL DBW4W%
  95. GLOBAL SpreadExamples%
  96. GLOBAL SpreadW4W%
  97. GLOBAL FormsExamples%
  98. GLOBAL ToolsSpelling%
  99. GLOBAL ToolsCards%
  100.  
  101. GLOBAL Language$
  102. GLOBAL Restart$
  103.  
  104. DECLARE SUB Install
  105. DECLARE SUB RegisterOle2
  106. DECLARE SUB AddRegData (RegData$)
  107. DECLARE SUB CheckForShare
  108. DECLARE SUB FreeLibrary LIB "KERNEL.EXE" (arg%)
  109. DECLARE SUB AddOptFilesToCopyList (ftype%)
  110. DECLARE SUB RecalcOptFiles (ftype%)
  111. DECLARE SUB RecalcPath (ftype%)
  112. DECLARE SUB SetDriveStatus
  113. DECLARE SUB CheckOptFiles (ftype%)
  114. DECLARE SUB AddOptFilesToCopyList1 (ftype%)
  115. DECLARE SUB RecalcOptFiles1 (ftype%)
  116. DECLARE SUB SetDriveStatus1
  117. DECLARE SUB InitCustInstall
  118. DECLARE SUB GetUserInfo
  119. DECLARE SUB ShowProductID
  120. DECLARE SUB AskEXIT
  121. DECLARE SUB Welcome
  122. DECLARE SUB Toobig
  123. DECLARE SUB RestartDlg
  124. DECLARE SUB BadPath
  125. DECLARE SUB GetPath
  126. DECLARE SUB CheckSystem
  127. DECLARE SUB FQuit
  128. DECLARE SUB InitData
  129. DECLARE SUB UpdateAbilityIni
  130. DECLARE SUB UpdateCommsIni
  131. DECLARE SUB UpdateWinIni
  132. DECLARE SUB CreateProgman
  133. DECLARE SUB AddToBillboard
  134. DECLARE SUB FillCopyList
  135. DECLARE SUB GetCustomInstall
  136. DECLARE SUB GetMinimumInstall
  137. DECLARE SUB GetItemsInstall(ftype%)
  138. DECLARE SUB ShowItemsInstall
  139. DECLARE SUB RestartSystem ()
  140.  
  141. DECLARE FUNCTION GetOptionInstall () AS INTEGER
  142. DECLARE FUNCTION ConfirmUserInfo() AS INTEGER
  143. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  144.  
  145. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  146. DECLARE FUNCTION ShowWindow LIB "USER.EXE" (hWnd%,Flag%) AS INTEGER
  147. DECLARE FUNCTION IsShared LIB "a4w.dll" (arg$) AS INTEGER
  148. DECLARE FUNCTION WriteProgramId LIB "a4w.dll" (arg1$,arg2$,arg3$,arg4$) AS INTEGER
  149.  
  150. INIT:
  151.         CUIDLL$ = "a4w.dll"            ''Custom user interface dll
  152. '$IFDEF UK
  153.         Language$ = "Ability Spelling UK"
  154. '$ELSE
  155.         Language$ = "Ability Spelling USA"
  156. '$ENDIF
  157.         Restart$ = "NO"
  158.         FrameWindow% = HwndFrame ()
  159.         i% = ShowWindow(FrameWindow%,3)
  160.         SetBitmap CUIDLL$, LOGO
  161.         SetTitle SETUP_MSG$
  162.         szInf$ = GetSymbolValue("STF_SRCINFPATH")
  163.         IF szInf$ = "" THEN
  164.                     szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  165.         END IF
  166.         ReadInfFile szInf$
  167.         InitData
  168. '$IFDEF DEBUG
  169.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  170. '$ENDIF ''DEBUG
  171.         CheckSystem
  172.         Welcome
  173.         GetUserInfo
  174.         GetPath
  175.         s% = GetOptionInstall()
  176.         IF s% = CUSTOMSETUP THEN
  177.                     GetCustomInstall
  178.         ELSEIF s% = MINIMUMSETUP THEN
  179.                     GetMinimumInstall
  180.         END IF
  181.         ShowProductID
  182.         Install
  183.         QUIT:
  184.                     ON ERROR GOTO ERRQUIT
  185.         FQuit
  186.         END
  187. ERRQUIT:
  188.         i% = DoMsgBox("Setup sources were corrupted, call xxx-xxxx!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  189. END
  190.  
  191. '**
  192. '** Purpose:
  193. '**     Builds the copy list and performs all installation operations.
  194. '** Arguments:
  195. '**     none.
  196. '** Returns:
  197. '**     none.
  198. '*************************************************************************
  199. SUB Install STATIC
  200.         CreateDir DEST$, cmoNone
  201.         ClearCopyList
  202.         FillCopyList
  203.         AddToBillboard
  204.         SetCopyGaugePosition 89,135
  205.  
  206.         SetRestartDir  GetWindowsDir()
  207.  
  208.         CopyFilesInCopyList
  209.         i% = WriteProgramId (DEST$+"\about.dll",szUserName$,szCompany$,szProductID$)
  210.         UpdateAbilityIni
  211.         UpdateCommsIni
  212.         UpdateWinIni
  213.         RegisterOle2
  214.         CreateProgman
  215.         CheckForShare
  216.         RestartSystem
  217. END SUB
  218.  
  219.  
  220. SUB CheckForShare STATIC
  221. IF Check% = 1 THEN
  222.             PathToShare$ = FindFileInTree("SHARE.EXE","C:\")
  223.             i% = IsShared(PathToShare$ + " /L:500 /F:5100")
  224.             IF i% = 0 THEN
  225.                     Restart$ = "YES"
  226.             ENDIF
  227. ENDIF
  228. END SUB
  229.  
  230.  
  231. '**
  232. '** Purpose:
  233. '**     Appends a file name to the end of a directory path,
  234. '**     inserting a backslash character as needed.
  235. '** Arguments:
  236. '**     szDir$  - full directory path (with optional ending "\")
  237. '**     szFile$ - filename to append to directory
  238. '** Returns:
  239. '**     Resulting fully qualified path name.
  240. '*************************************************************************
  241. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  242.         IF szDir$ = "" THEN
  243.                 MakePath = szFile$
  244.         ELSEIF szFile$ = "" THEN
  245.                 MakePath = szDir$
  246.         ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  247.                 MakePath = szDir$ + szFile$
  248.         ELSE
  249.                 MakePath = szDir$ + "\" + szFile$
  250.         END IF
  251. END FUNCTION
  252.  
  253.  
  254. '**
  255. '** Purpose:
  256. '**     Adds the specified option files to the copy list.
  257. '** Arguments:
  258. '**     ftype%  - type of files to add, one of the following:
  259. '**             MANAGERFILES, WRITEFILES, DBFILES
  260. '** Returns:
  261. '**     none.
  262. '*************************************************************************
  263. SUB AddOptFilesToCopyList (ftype%) STATIC
  264.         IF ftype% = APPFILES THEN
  265.                     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  266.                     WinDir$ = GetWindowsDir()
  267.         ELSEIF ftype% = SYSTEMFILES THEN
  268.                     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  269.                     WinDir$ = GetWindowsDir()
  270.         ELSEIF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  271.                     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  272.                     WinDir$ = GetWindowsDir()
  273.         ELSE
  274.                     GOTO END_ADDOPTFILES
  275.         ENDIF
  276.         IF ftype% = APPFILES THEN
  277.                     AddSectionFilesToCopyList "Ability", SrcDir$, DEST$
  278.         ELSEIF ftype% = SYSTEMFILES THEN
  279.                     AddSectionFilesToCopyList "System", SrcDir$,WinDir$
  280.                     AddSectionFilesToCopyList "Borland", SrcDir$,WinDir$
  281.         ELSEIF ftype% = MANAGERFILES THEN
  282.                     AddSectionFilesToCopyList "Ability Manager", SrcDir$, DEST$
  283.         ELSEIF ftype% = WRITEFILES THEN
  284.                     AddSectionFilesToCopyList "Ability Write", SrcDir$, DEST$
  285.                     IF WriteExamples% = 1 THEN
  286.                                 AddSectionFilesToCopyList "Ability Write Examples", SrcDir$, DEST$+"\DOCS"
  287.                     ENDIF
  288.                     IF WriteW4W% = 1 THEN
  289.                                 AddSectionFilesToCopyList "Ability Write W4W", SrcDir$, DEST$
  290.                     ENDIF
  291.         ELSEIF ftype% = DBFILES THEN
  292.                     AddSectionFilesToCopyList "Ability Database", SrcDir$, DEST$
  293.                     IF DBExamples% = 1 THEN
  294.                                 AddSectionFilesToCopyList "Ability Database Examples", SrcDir$, DEST$
  295.                     ENDIF
  296.                     IF DBW4W% = 1 THEN
  297.                                 AddSectionFilesToCopyList "Ability Database W4W", SrcDir$, DEST$
  298.                     ENDIF
  299.         ELSEIF ftype% = SPREADFILES THEN
  300.                     AddSectionFilesToCopyList "Ability Spreadsheet", SrcDir$, DEST$
  301.                     IF SpreadExamples% = 1 THEN
  302.                                 AddSectionFilesToCopyList "Ability Spreadsheet Examples", SrcDir$, DEST$ + "\SHEETS"
  303.                     ENDIF
  304.                     IF SpreadW4W% = 1 THEN
  305.                                 AddSectionFilesToCopyList "Ability Spreadsheet W4W", SrcDir$, DEST$
  306.                     ENDIF
  307.         ELSEIF ftype% = FORMSFILES THEN
  308.                     AddSectionFilesToCopyList "Ability Forms", SrcDir$, DEST$
  309.                     IF FormsExamples% = 1 THEN
  310.                                 AddSectionFilesToCopyList "Ability Forms Examples", SrcDir$, DEST$ + "\FORMS"
  311.                     ENDIF
  312.         ELSEIF ftype% = COMMSFILES THEN
  313.                     AddSectionFilesToCopyList "Ability Communication", SrcDir$, DEST$
  314.         ELSEIF ftype% = TOOLSFILES THEN
  315.                     AddSectionFilesToCopyList "Ability W4W", SrcDir$, DEST$
  316.                     IF ToolsSpelling%  = 1 THEN
  317.                                 AddSectionFilesToCopyList Language$, SrcDir$, DEST$
  318.                     ENDIF
  319.                     IF ToolsCards% = 1 THEN
  320.                                 AddSectionFilesToCopyList "Cards", SrcDir$, DEST$ + "\QTUTOR"
  321.                     ENDIF
  322.         END IF
  323.         SrcDir$ = ""
  324.         WinDir$ = ""
  325. END_ADDOPTFILES:
  326. END SUB
  327.  
  328.  
  329. '**
  330. '** Purpose:
  331. '**     Adds the specified option files to the copy list.
  332. '** Arguments:
  333. '**     ftype%  - type of files to add, one of the following:
  334. '**             MANAGERFILES, WRITEFILES, DBFILES
  335. '** Returns:
  336. '**     none.
  337. '*************************************************************************
  338. SUB AddOptFilesToCopyList1 (ftype%) STATIC
  339.     IF GetListItem(CHECKSTATES1$, ftype%) = "ON" THEN
  340.                 SrcDir$ = GetSymbolValue("STF_SRCDIR")
  341.                 WinDir$ = GetWindowsDir()
  342.                 IF CURRENTMODULE% = MANAGERFILES                                THEN
  343.                             IF ftype% = EXAMPLESFILES THEN
  344.                                         AddSectionFilesToCopyList "Ability", SrcDir$, DEST$
  345.                             ELSEIF ftype% = FILTERSFILES THEN
  346.                                         AddSectionFilesToCopyList "Ability Manager", SrcDir$, DEST$
  347.                             END IF
  348.                     ELSEIF CURRENTMODULE% = WRITEFILES   THEN
  349.                             IF ftype% = EXAMPLESFILES THEN
  350.                                         AddSectionFilesToCopyList "Ability Write Examples", SrcDir$, DEST$ + "\DOCS"
  351.                             ELSEIF ftype% = FILTERSFILES THEN
  352.                                         AddSectionFilesToCopyList "Ability Write W4W", SrcDir$, DEST$
  353.                             END IF
  354.                     ELSEIF CURRENTMODULE% = DBFILES      THEN
  355.                             IF ftype% = EXAMPLESFILES THEN
  356.                                         AddSectionFilesToCopyList "Ability Database Examples", SrcDir$, DEST$
  357.                             ELSEIF ftype% = FILTERSFILES THEN
  358.                                         AddSectionFilesToCopyList "Ability Database W4W", SrcDir$, DEST$
  359.                             END IF
  360.                     ELSEIF CURRENTMODULE% = SPREADFILES  THEN
  361.                             IF ftype% = EXAMPLESFILES THEN
  362.                                         AddSectionFilesToCopyList "Ability Spreadsheet Examples", SrcDir$, DEST$ + "\SHEETS"
  363.                             ELSEIF ftype% = FILTERSFILES THEN
  364.                                         AddSectionFilesToCopyList "Ability Spreadsheet W4W", SrcDir$, DEST$
  365.                             END IF
  366.                     ELSEIF CURRENTMODULE% = FORMSFILES   THEN
  367.                             IF ftype% = EXAMPLESFILES THEN
  368.                                         AddSectionFilesToCopyList "Ability Forms Examples", SrcDir$, DEST$+"\FORMS"
  369.                             END IF
  370.                     ELSEIF CURRENTMODULE% = COMMSFILES   THEN
  371.                             IF ftype% = EXAMPLESFILES THEN
  372.                                         AddSectionFilesToCopyList "Ability Spreadsheet Examples", SrcDir$, DEST$
  373.                             ELSEIF ftype% = FILTERSFILES THEN
  374.                                         AddSectionFilesToCopyList "Ability Spreadsheet W4W", SrcDir$, DEST$
  375.                             END IF
  376.                     ELSEIF CURRENTMODULE% = TOOLSFILES   THEN
  377.                             AddSectionFilesToCopyList "Ability W4W", SrcDir$, DEST$
  378.                             IF ftype% = EXAMPLESFILES THEN
  379.                                         AddSectionFilesToCopyList "Cards", SrcDir$, DEST$ + "\QTUTOR"
  380.                             ELSEIF ftype% = FILTERSFILES THEN
  381.                                         AddSectionFilesToCopyList Language$, SrcDir$, DEST$
  382.                             END IF
  383.                 END IF
  384.                 SrcDir$ = ""
  385.                 WinDir$ = ""
  386.     END IF
  387. END SUB
  388.  
  389.  
  390. '**
  391. '** Purpose:
  392. '**     Recalculates disk space for the given option files and sets
  393. '**     the status info symbol "StatusItemsText".
  394. '** Arguments:
  395. '**     ftype% - type of files to add, one of the following:
  396. '**             MANAGERFILES, WRITEFILES, DBFILES
  397. '** Returns:
  398. '**     none.
  399. '*************************************************************************
  400. SUB RecalcOptFiles (ftype%) STATIC
  401.         CursorSave% = ShowWaitCursor()
  402.         ClearCopyList
  403.         AddOptFilesToCopyList ftype%
  404.         fExtra% = 0
  405.         IF ftype% = SYSTEMFILES THEN
  406.                     ListSym$ = SYSTEMNEEDS$
  407.                     ''Add extra cost to Windows drive for ini/progman, etc.
  408.                     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  409.                     ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  410.                     fExtra% = 1
  411.         ELSEIF ftype% = APPFILES THEN
  412.                     ListSym$ = APPNEEDS$
  413.         ELSEIF ftype% = MANAGERFILES THEN
  414.                     ListSym$ = MANAGERNEEDS$
  415.         ELSEIF ftype% = WRITEFILES THEN
  416.                     ListSym$ = WRITENEEDS$
  417.         ELSEIF ftype% = DBFILES THEN
  418.                     ListSym$ = DBNEEDS$
  419.         ELSEIF ftype% = SPREADFILES THEN
  420.                     ListSym$ = SPREADNEEDS$
  421.         ELSEIF ftype% = FORMSFILES THEN
  422.                     ListSym$ = FORMSNEEDS$
  423.         ELSEIF ftype% = COMMSFILES THEN
  424.                     ListSym$ = COMMSNEEDS$
  425.         ELSEIF ftype% = TOOLSFILES THEN
  426.                     ListSym$ = TOOLSNEEDS$
  427.         ELSEIF ftype% = ABILITYFILES THEN
  428.                     ListSym$ = ABILITYNEEDS$
  429.         ELSEIF ftype% = CARDSFILES THEN
  430.                     ListSym$ = CARDSNEEDS$
  431.         ELSEIF ftype% = BORLANDFILES THEN
  432.                     ListSym$ = BORLANDNEEDS$
  433.         ELSEIF ftype% = W4WFILES THEN
  434.                     ListSym$ = W4WNEEDS$
  435.         END IF
  436.         StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  437.         IF ftype% = APPFILES THEN
  438.                     GOTO END_RECALCOPTFILE
  439.         ENDIF
  440.         IF ftype% = SYSTEMFILES THEN
  441.                     GOTO END_RECALCOPTFILE1
  442.         ENDIF
  443.         cost& = 0
  444.         FOR i% = 1 TO 26 STEP 1
  445.                     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  446.         NEXT i%
  447.         ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  448.         IF StillNeed& > 0 THEN
  449.                     ReplaceListItem BIGLIST$, ftype%, "YES"
  450.         ELSE
  451.                     ReplaceListItem BIGLIST$, ftype%, ""
  452.         END IF
  453. END_RECALCOPTFILE1:
  454.         IF fExtra% THEN
  455.                     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  456.         END IF
  457. END_RECALCOPTFILE:
  458.         RestoreCursor CursorSave%
  459.         ListSym$ = ""
  460. END SUB
  461.  
  462. '**
  463. '** Purpose:
  464. '**     Recalculates disk space for the given option files and sets
  465. '**     the status info symbol "StatusItemsText".
  466. '** Arguments:
  467. '**     ftype% - type of files to add, one of the following:
  468. '**             MANAGERFILES, WRITEFILES, DBFILES
  469. '** Returns:
  470. '**     none.
  471. '*************************************************************************
  472. SUB RecalcOptFiles1 (ftype%) STATIC
  473.         CursorSave% = ShowWaitCursor()
  474.         ClearCopyList
  475.         AddOptFilesToCopyList1 ftype%
  476.         fExtra% = 0
  477.         IF ftype% = SYSTEMFILES THEN
  478.                     ListSym$ = SYSTEMNEEDS$
  479.                     ''Add extra cost to Windows drive for ini/progman, etc.
  480.                     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  481.                     ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  482.                     fExtra% = 1
  483.         ELSEIF ftype% = EXAMPLESFILES THEN
  484.                     ListSym$ = EXAMPLESNEEDS$
  485.         ELSEIF ftype% = FILTERSFILES THEN
  486.                     ListSym$ = FILTERSNEEDS$
  487.         END IF
  488.         StillNeed& = GetCopyListCost(EXTRACOSTS1$, ListSym$, "")
  489.         cost& = 0
  490.         FOR i% = 1 TO 26 STEP 1
  491.                         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  492.         NEXT i%
  493.         ReplaceListItem STATUSTEXT1$, ftype%, STR$(cost& / 1024) + " K"
  494.         IF StillNeed& > 0 THEN
  495.                     ReplaceListItem BIGLIST1$, ftype%, "YES"
  496.         ELSE
  497.                     ReplaceListItem BIGLIST1$, ftype%, ""
  498.         END IF
  499.         IF fExtra% THEN
  500.                     ReplaceListItem EXTRACOSTS1$, ndrive%, "0"
  501.         END IF
  502.         RestoreCursor CursorSave%
  503.         ListSym$ = ""
  504. END SUB
  505.  
  506.  
  507. '**
  508. '** Purpose:
  509. '**     Recalculates disk space and sets option status info according
  510. '**     to the current destination path.
  511. '** Arguments:
  512. '**     none.
  513. '** Returns:
  514. '**     none.
  515. '*************************************************************************
  516. SUB RecalcPath(ftype%) STATIC
  517.         CursorSave% = ShowWaitCursor()
  518.         IF ftype%=0 THEN
  519.                     RecalcOptFiles MANAGERFILES
  520.                     RecalcOptFiles WRITEFILES
  521.                     RecalcOptFiles DBFILES
  522.                     RecalcOptFiles SPREADFILES
  523.                     RecalcOptFiles FORMSFILES
  524.                     RecalcOptFiles COMMSFILES
  525.                     RecalcOptFiles TOOLSFILES
  526.                     RecalcOptFiles APPFILES
  527.                     RecalcOptFiles SYSTEMFILES
  528.         ELSE
  529.                     RecalcOptFiles1 EXAMPLESFILES
  530.                     RecalcOptFiles1 FILTERSFILES
  531.         ENDIF
  532.                     RestoreCursor CursorSave%
  533. END SUB
  534.  
  535. '**
  536. '** Purpose:
  537. '**     Sets drive status info according to latest disk space calcs.
  538. '** Arguments:
  539. '**     none.
  540. '** Returns:
  541. '**     none.
  542. '*************************************************************************
  543. SUB SetDriveStatus STATIC
  544.         drive$ = MID$(DEST$, 1, 1)
  545.         ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  546.         cost& = 0
  547.         cost&  = cost& + VAL(GetListItem(SYSTEMNEEDS$, ndrive%))
  548.         cost&  = cost& + VAL(GetListItem(APPNEEDS$, ndrive%))
  549.         cost&  = cost& + VAL(GetListItem(MANAGERNEEDS$, ndrive%))
  550.         cost&  = cost& + VAL(GetListItem(WRITENEEDS$, ndrive%))
  551.         cost&  = cost& + VAL(GetListItem(DBNEEDS$, ndrive%))
  552.         cost&  = cost& + VAL(GetListItem(SPREADNEEDS$, ndrive%))
  553.         cost&  = cost& + VAL(GetListItem(FORMSNEEDS$, ndrive%))
  554.         cost&  = cost& + VAL(GetListItem(COMMSNEEDS$, ndrive%))
  555.         cost&  = cost& + VAL(GetListItem(TOOLSNEEDS$, ndrive%))
  556.         free& = GetFreeSpaceForDrive(drive$)
  557.         ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  558.         ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  559.         ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  560.         IF drive$ = WINDRIVE$ THEN
  561.                     ReplaceListItem DRIVETEXT$, 4, ""
  562.                     ReplaceListItem DRIVETEXT$, 5, ""
  563.                     ReplaceListItem DRIVETEXT$, 6, ""
  564.         ELSE
  565.                     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  566.                     cost& = 0
  567.                     cost&  = cost& + VAL(GetListItem(SYSTEMNEEDS$, ndrive%))
  568.                     cost&  = cost& + VAL(GetListItem(APPNEEDS$, ndrive%))
  569.                     cost&  = cost& + VAL(GetListItem(MANAGERNEEDS$, ndrive%))
  570.                     cost&  = cost& + VAL(GetListItem(WRITENEEDS$, ndrive%))
  571.                     cost&  = cost& + VAL(GetListItem(DBNEEDS$, ndrive%))
  572.                     cost&  = cost& + VAL(GetListItem(SPREADNEEDS$, ndrive%))
  573.                     cost&  = cost& + VAL(GetListItem(FORMSNEEDS$, ndrive%))
  574.                     cost&  = cost& + VAL(GetListItem(COMMSNEEDS$, ndrive%))
  575.                     cost&  = cost& + VAL(GetListItem(TOOLSNEEDS$, ndrive%))
  576.                     IF cost& = 0 THEN
  577.                                 ReplaceListItem DRIVETEXT$, 4, ""
  578.                                 ReplaceListItem DRIVETEXT$, 5, ""
  579.                                 ReplaceListItem DRIVETEXT$, 6, ""
  580.                     ELSE
  581.                                 free& = GetFreeSpaceForDrive(WINDRIVE$)
  582.                                 ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  583.                                 ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  584.                                 ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  585.                     END IF
  586.         END IF
  587. END SUB
  588.  
  589.  
  590. '**
  591. '** Purpose:
  592. '**     Sets drive status info according to latest disk space calcs.
  593. '** Arguments:
  594. '**     none.
  595. '** Returns:
  596. '**     none.
  597. '*************************************************************************
  598. SUB SetDriveStatus1 STATIC
  599.         drive$ = MID$(DEST$, 1, 1)
  600.         ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  601.         cost& = 0
  602.         cost&  = cost& + VAL(GetListItem(EXAMPLESNEEDS$, ndrive%))
  603.         cost&  = cost& + VAL(GetListItem(FILTERSNEEDS$, ndrive%))
  604.         free& = GetFreeSpaceForDrive(drive$)
  605.         ReplaceListItem DRIVETEXT1$, 1, drive$ + ":"
  606.         ReplaceListItem DRIVETEXT1$, 2, STR$(cost& / 1024) + " K"
  607.         ReplaceListItem DRIVETEXT1$, 3, STR$(free& / 1024) + " K"
  608.         IF drive$ = WINDRIVE$ THEN
  609.                     ReplaceListItem DRIVETEXT1$, 4, ""
  610.                     ReplaceListItem DRIVETEXT1$, 5, ""
  611.                     ReplaceListItem DRIVETEXT1$, 6, ""
  612.         ELSE
  613.                     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  614.                     cost& = 0
  615.                     cost&  = cost& + VAL(GetListItem(EXAMPLESNEEDS$, ndrive%))
  616.                     cost&  = cost& + VAL(GetListItem(FILTERSNEEDS$, ndrive%))
  617.                     IF cost& = 0 THEN
  618.                                 ReplaceListItem DRIVETEXT1$, 4, ""
  619.                                 ReplaceListItem DRIVETEXT1$, 5, ""
  620.                                 ReplaceListItem DRIVETEXT1$, 6, ""
  621.                     ELSE
  622.                                 free& = GetFreeSpaceForDrive(WINDRIVE$)
  623.                                 ReplaceListItem DRIVETEXT1$, 4, WINDRIVE$ + ":"
  624.                                 ReplaceListItem DRIVETEXT1$, 5, STR$(cost& / 1024) + " K"
  625.                                 ReplaceListItem DRIVETEXT1$, 6, STR$(free& / 1024) + " K"
  626.                     END IF
  627.         END IF
  628. END SUB
  629.  
  630.  
  631.  
  632.  
  633.  
  634. '**
  635. '** Purpose:
  636. '**     Registration of OLE2.REG.
  637. '** Arguments:
  638. '**     none.
  639. '** Returns:
  640. '**     none.
  641. '*************************************************************************
  642. SUB RegisterOle2 STATIC
  643.     j% = ShowWaitCursor()
  644.     sz$ = UIStartDlg(CUIDLL$, 8000, FMODELESSDLGPROC$, APPHELP, HELPPROC$)
  645.     RegFile$ = MakePath(DEST$,"OLE2.INI")
  646.     FOR i% = 1 TO 251 STEP 1
  647.                     Value$ = GetIniKeyString (RegFile$,"OLE2REG",STR$(i%))
  648.     AddRegData Value$
  649.     NEXT
  650. '**
  651. '** Registration of Ability Private Classes
  652. '**
  653. '** Spreadsheet
  654.         RegFile$ = MakePath(DEST$,"abspread.exe")
  655.         SpreadCLSID$ = "CLSID\{72BFC160-8056-101B-AE51-04021C007002}"
  656.         AddRegData "ASHEET,Ability Spreadsheet or Chart"
  657.         AddRegData "ASHEET\CLSID,{72BFC160-8056-101B-AE51-04021C007002}"
  658.         AddRegData "ASHEET\Insertable,"
  659.         AddRegData "CLSID\{72BFC160-8056-101B-AE51-04021C007002}\ProgID,ASHEET"
  660.         AddRegData "ASHEET\protocol\StdFileEditing\server," +RegFile$
  661.         AddRegData "ASHEET\protocol\StdFileEditing\verb\0,&Edit"
  662.         AddRegData "ASHEET\protocol\StdFileEditing\verb\1,&Open"
  663.         AddRegData SpreadCLSID$ + ",Ability Spreadsheet or Chart"
  664.         AddRegData SpreadCLSID$ + "\Insertable,"
  665.         AddRegData SpreadCLSID$ + "\MiscStatus,0"
  666.         AddRegData SpreadCLSID$ + "\DefaultIcon," + RegFile$+",0"
  667.         AddRegData SpreadCLSID$ + "\AuxUserType\2,Ability Spreadsheet or Chart"
  668.         AddRegData SpreadCLSID$ + "\AuxUserType\3,Ability Spreadsheet or Chart"
  669.         AddRegData SpreadCLSID$ + "\Verb\0,&Play,0,2"
  670.         AddRegData SpreadCLSID$ + "\Verb\1,&Open,0,2"
  671.         AddRegData SpreadCLSID$ + "\LocalServer," +RegFile$
  672.         AddRegData SpreadCLSID$ + "\InprocHandler,ole2.dll"
  673.         AddRegData SpreadCLSID$ + "\DataFormats\GetSet\0,3,1,32,1"
  674.         AddRegData ".aws,ASHEET"
  675.         AddRegData ".awc,ASHEET"
  676.         AddRegData ".xss,ASHEET"
  677. '** Write
  678.         RegFile$ = MakePath(DEST$,"abwrite.exe")
  679.         AddRegData "AWRITE,Ability Write"
  680.         AddRegData "AWRITE\CLSID,{9128CA20-8056-101B-AE51-04021C007002}"
  681.         AddRegData "AWRITE\Insertable,"
  682.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\ProgID,AWRITE"
  683.         AddRegData "AWRITE\protocol\StdFileEditing\server," + RegFile$
  684.         AddRegData "AWRITE\protocol\StdFileEditing\verb\0,&Edit"
  685.         AddRegData "AWRITE\protocol\StdFileEditing\verb\1,&Open"
  686.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002},Ability Write"
  687.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\Insertable,"
  688.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\MiscStatus,0"
  689.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\DefaultIcon," + RegFile$+",0"
  690.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\AuxUserType\2,Ability Write"
  691.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\AuxUserType\3,Ability Write"
  692.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\Verb\0,&Play,0,2"
  693.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\Verb\1,&Open,0,2"
  694.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\LocalServer," + RegFile$
  695.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\InprocHandler,ole2.dll"
  696.         AddRegData "CLSID\{9128CA20-8056-101B-AE51-04021C007002}\DataFormats\GetSet\0,3,1,32,1"
  697.         AddRegData ".AWW,AWRITE"
  698.         AddRegData ".xtx,AWRITE"
  699. '** FormMaker
  700.         RegFile$ = MakePath(DEST$,"abforms.exe")
  701.         AddRegData "AFORMS,Ability Forms"
  702.         AddRegData "AFORMS\CLSID,{965540A0-8056-101B-AE51-04021C007002}"
  703.         AddRegData "AFORMS\Insertable,"
  704.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\ProgID,AFORMS"
  705.         AddRegData "AFORMS\protocol\StdFileEditing\server,"+RegFile$
  706.         AddRegData "AFORMS\protocol\StdFileEditing\verb\0,&Edit"
  707.         AddRegData "AFORMS\protocol\StdFileEditing\verb\1,&Open"
  708.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002},Ability Forms"
  709.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\Insertable,"
  710.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\MiscStatus,0"
  711.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\DefaultIcon,"+RegFile$+",0"
  712.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\AuxUserType\2,Ability Forms"
  713.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\AuxUserType\3,Ability Forms"
  714.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\Verb\0,&Play,0,2"
  715.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\Verb\1,&Open,0,2"
  716.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\LocalServer,"+RegFile$
  717.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\InprocHandler,ole2.dll"
  718.         AddRegData "CLSID\{965540A0-8056-101B-AE51-04021C007002}\DataFormats\GetSet\0,3,1,32,1"
  719.         AddRegData ".awf,AFORMS"
  720.         AddRegData ".frm,AFORMS"
  721. '** Draw
  722.         RegFile$ = MakePath(DEST$,"abdraw.exe")
  723.         AddRegData "ADRAW,Ability Draw"
  724.         AddRegData "ADRAW\CLSID,{9B70EE40-8056-101B-AE51-04021C007002}"
  725.         AddRegData "ADRAW\Insertable,"
  726.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\ProgID,ADRAW"
  727.         AddRegData "ADRAW\protocol\StdFileEditing\server,"+RegFile$
  728.         AddRegData "ADRAW\protocol\StdFileEditing\verb\0,&Edit"
  729.         AddRegData "ADRAW\protocol\StdFileEditing\verb\1,&Open"
  730.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002},Ability Draw"
  731.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\Insertable,"
  732.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\MiscStatus,0"
  733.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\DefaultIcon,"+RegFile$+",0"
  734.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\AuxUserType\2,Ability Draw"
  735.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\AuxUserType\3,Ability Draw"
  736.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\Verb\0,&Play,0,2"
  737.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\Verb\1,&Open,0,2"
  738.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\LocalServer,"+RegFile$
  739.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\InprocHandler,ole2.dll"
  740.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\DataFormats\GetSet\0,3,1,32,1"
  741.         AddRegData ".AWG,ADRAW"
  742.         AddRegData ".BMP,ADRAW"
  743.         AddRegData ".WMF,ADRAW"
  744.         AddRegData ".PCX,ADRAW"
  745.         AddRegData ".TIF,ADRAW"
  746.         AddRegData ".GIF,ADRAW"
  747.         AddRegData ".TGA,ADRAW"
  748. '**  DataBase
  749.         RegFile$ = MakePath(DEST$,"abdata.exe")
  750.         AddRegData "ADBASE,Ability Database"
  751.         AddRegData "ADBASE\CLSID,{9F90D6C0-8056-101B-AE51-04021C007002}"
  752.         AddRegData "CLSID\{9F90D6C0-8056-101B-AE51-04021C007002}\ProgID,ADBASE"
  753.         AddRegData "ADBASE\protocol\StdFileEditing\server,"+RegFile$
  754.         AddRegData "ADBASE\protocol\StdFileEditing\verb\0,&Edit"
  755.         AddRegData "ADBASE\protocol\StdFileEditing\verb\1,&Open"
  756.         AddRegData "CLSID\{9F90D6C0-8056-101B-AE51-04021C007002},Ability Database"
  757.         AddRegData "CLSID\{9F90D6C0-8056-101B-AE51-04021C007002}\LocalServer,"+RegFile$
  758.         AddRegData "CLSID\{9F90D6C0-8056-101B-AE51-04021C007002}\InprocHandler,ole2.dll"
  759.         AddRegData "CLSID\{9B70EE40-8056-101B-AE51-04021C007002}\DataFormats\GetSet\0,3,1,32,1"
  760.         AddRegData ".awd,ADBASE"
  761.         AddRegData ".awq,ADBASE"
  762. '** IDataBaseObject Interface - maps IID into proxy/stub CLSID
  763.         AddRegData "Interface\{A4D5B740-8056-101B-AE51-04021C007002},IDataBaseObject"
  764.         AddRegData "Interface\{A4D5B740-8056-101B-AE51-04021C007002}\NumMethods,16"
  765.         AddRegData "Interface\{A4D5B740-8056-101B-AE51-04021C007002}\ProxyStubClsid,{B1BBB7C0-8056-101B-AE51-04021C007002}"
  766. '** IDBServer Interface - maps IID into proxy/stub CLSID
  767.         AddRegData "Interface\{A95A5500-8056-101B-AE51-04021C007002},IDBServer"
  768.         AddRegData "Interface\{A95A5500-8056-101B-AE51-04021C007002}\NumMethods,12"
  769.         AddRegData "Interface\{A95A5500-8056-101B-AE51-04021C007002}\ProxyStubClsid,{B1BBB7C0-8056-101B-AE51-04021C007002}"
  770. '** IHotLink Interface - maps IID into proxy/stub CLSID
  771.         AddRegData "Interface\{AE221640-8056-101B-AE51-04021C007002},IHotLink"
  772.         AddRegData "Interface\{AE221640-8056-101B-AE51-04021C007002}\NumMethods,5"
  773.         AddRegData "Interface\{AE221640-8056-101B-AE51-04021C007002}\ProxyStubClsid,{B1BBB7C0-8056-101B-AE51-04021C007002}"
  774. '** DataBase Proxy/Stub DLL CLSID
  775.         RegFile$ = MakePath(DEST$,"dbprxstb.dll")
  776.         AddRegData "CLSID\{B1BBB7C0-8056-101B-AE51-04021C007002},Ability Database Proxy Stub"
  777.         AddRegData "CLSID\{B1BBB7C0-8056-101B-AE51-04021C007002}\InprocServer," +RegFile$
  778. '** Data Transfer Object
  779.         RegFile$ = MakePath(DEST$,"datatran.dll")
  780.         AddRegData "DataTransferObject,Data Transfer Object"
  781.         AddRegData "DataTransferObject\CLSID,BC5F6960-8056-101B-AE51-04021C007002}"
  782.         AddRegData "CLSID\{BC5F6960-8056-101B-AE51-04021C007002},Data Transfer Object"
  783.         AddRegData "CLSID\{BC5F6960-8056-101B-AE51-04021C007002}\InprocServer," +RegFile$
  784. '** ProgIdMoniker
  785.         AddRegData "CLSID\{322A8DE0-902F-101B-AE51-04021C007002},ProgIdMoniker"
  786.         AddRegData "CLSID\{322A8DE0-902F-101B-AE51-04021C007002}\InProcServer,prgidmon.dll"
  787. '** DrawGroup
  788.         RegFile$ = MakePath(DEST$,"drawdll.dll")
  789.         AddRegData "Drawgroup,Draw Shape Group Objects"
  790.         AddRegData "Drawgroup\CLSID,{3EE75B80-902F-101B-AE51-04021C007002}"
  791.         AddRegData "CLSID\{3EE75B80-902F-101B-AE51-04021C007002},Draw Objects"
  792.         AddRegData "CLSID\{3EE75B80-902F-101B-AE51-04021C007002}\InprocServer,"+RegFile$
  793.         UIPop 1
  794.         RestoreCursor j%
  795. END SUB
  796.  
  797.  
  798. '**
  799. '** Purpose:
  800. '**     Creates a Registration Database key that
  801. '**             is a subkey of HKEYS_CLASSES_ROOT and
  802. '**             associates a value with the key.
  803. '** Arguments:
  804. '**     RegData$ = Key$,Value$.
  805. '** Returns:
  806. '**     none.
  807. '*************************************************************************
  808. SUB AddRegData (RegData$) STATIC
  809.     iField% = LEN(RegData$)
  810.     FOR i% = 1 TO iField% STEP 1
  811.             IF MID$(RegData$, i%, 1) = "," THEN
  812.                     Key$ =   MID$(RegData$, 1, i%-1)
  813.                     Value$ = MID$(RegData$, i%+1, iField% - i% )
  814.                     CreateRegKeyValue Key$,Value$
  815.                     GOTO END_ADDREGDATA
  816.             END IF
  817.     NEXT
  818. END_ADDREGDATA:
  819. END SUB
  820.  
  821.  
  822. ''******************************************************************************
  823. ''                      INIT  Manager CustInst list symbols
  824. ''******************************************************************************
  825. SUB InitCustInstall STATIC
  826.         FOR i% = 1 TO 2 STEP 1
  827.                             ReplaceListItem BIGLIST1$                       ,i%, ""
  828.                             ReplaceListItem STATUSTEXT1$,i%, ""
  829.         NEXT i%
  830.         FOR i% = 1 TO 7 STEP 1
  831.                             ReplaceListItem DRIVETEXT1$     ,i%, ""
  832.         NEXT i%
  833.         ReplaceListItem DRIVETEXT1$, 7, DEST$
  834.         FOR i% = 1 TO 26 STEP 1
  835.                             ReplaceListItem EXTRACOSTS1$,i%, "0"
  836.         NEXT i%
  837.         RecalcPath(1)
  838.         SetDriveStatus1
  839. END SUB
  840.  
  841. SUB CheckOptFiles (ftype%) STATIC
  842.         IF CURRENTMODULE% = WRITEFILES THEN
  843.                             IF ftype% = EXAMPLESFILES THEN
  844.                                             IF WriteExamples% = 1 THEN
  845.                                                         WriteExamples% = 0
  846.                                             ELSE
  847.                                                         WriteExamples% = 1
  848.                                             ENDIF
  849.                             ELSEIF ftype% = FILTERSFILES THEN
  850.                                             IF WriteW4W% = 1 THEN
  851.                                                         WriteW4W% = 0
  852.                                             ELSE
  853.                                                         WriteW4W% = 1
  854.                                             ENDIF
  855.                             ENDIF
  856.         ELSEIF CURRENTMODULE% = DBFILES THEN
  857.                             IF ftype% = EXAMPLESFILES THEN
  858.                                             IF DBExamples% = 1 THEN
  859.                                                         DBExamples% = 0
  860.                                             ELSE
  861.                                                         DBExamples% = 1
  862.                                             ENDIF
  863.                             ELSEIF ftype% = FILTERSFILES THEN
  864.                                             IF DBW4W% = 1 THEN
  865.                                                         DBW4W% = 0
  866.                                             ELSE
  867.                                                         DBW4W% = 1
  868.                                             ENDIF
  869.                             ENDIF
  870.         ELSEIF CURRENTMODULE% = SPREADFILES THEN
  871.                             IF ftype% = EXAMPLESFILES THEN
  872.                                             IF SpreadExamples% = 1 THEN
  873.                                                         SpreadExamples% = 0
  874.                                             ELSE
  875.                                                         SpreadExamples% = 1
  876.                                             ENDIF
  877.                             ELSEIF ftype% = FILTERSFILES THEN
  878.                                             IF SpreadW4W% = 1 THEN
  879.                                                         SpreadW4W% = 0
  880.                                             ELSE
  881.                                                         SpreadW4W% = 1
  882.                                             ENDIF
  883.                             ENDIF
  884.         ELSEIF CURRENTMODULE% = FORMSFILES THEN
  885.                             IF ftype% = EXAMPLESFILES THEN
  886.                                             IF FormsExamples% = 1 THEN
  887.                                                         FormsExamples% = 0
  888.                                             ELSE
  889.                                                         FormsExamples% = 1
  890.                                             ENDIF
  891.                             ENDIF
  892.         ELSEIF CURRENTMODULE% = TOOLSFILES THEN
  893.                             IF ftype% = EXAMPLESFILES THEN
  894.                                             IF ToolsCards% = 1 THEN
  895.                                                         ToolsCards%     = 0
  896.                                             ELSE
  897.                                                         ToolsCards% = 1
  898.                                             ENDIF
  899.                             ELSEIF ftype% = FILTERSFILES THEN
  900.                                             IF ToolsSpelling% = 1 THEN
  901.                                                         ToolsSpelling% = 0
  902.                                             ELSE
  903.                                                         ToolsSpelling% = 1
  904.                                             ENDIF
  905.                             ENDIF
  906.         ENDIF
  907. END SUB
  908.  
  909.  
  910. SUB GetUserInfo STATIC
  911.         SetSymbolValue NAME_STR$, szUserName$
  912.         SetSymbolValue ORG_STR$, szCompany$
  913.         GET_USER_INFO_LOOP:
  914.         sz$ = UIStartDlg (CUIDLL$, INFORMATION, "FNameOrgDlgProc", 0, "")
  915.         IF sz$ = "REACTIVATE" THEN
  916.                 GOTO GET_USER_INFO_LOOP
  917.         ELSEIF sz$ = "OK" THEN
  918.                 szUserName$ = GetSymbolValue (NAME_STR$)
  919.                 szCompany$ = GetSymbolValue (ORG_STR$)
  920.         ENDIF
  921.                 szUserName$ = GetSymbolValue (NAME_STR$)
  922.                 szCompany$ = GetSymbolValue (ORG_STR$)
  923.                 i% = ConfirmUserInfo()
  924.                 IF i% = 0 THEN
  925.                         GOTO GET_USER_INFO_LOOP
  926.                 ENDIF
  927.         UIPop 1
  928. END SUB
  929.  
  930.  
  931. FUNCTION ConfirmUserInfo() STATIC AS INTEGER
  932.         ReplaceListItem CONFIRMTEXTLIST$,1,szUserName$
  933.         ReplaceListItem CONFIRMTEXTLIST$,2,szCompany$
  934. CONFIRM:
  935.         sz$ = UIStartDlg(CUIDLL$, CONFIRM, "FConfirmDlgProc", 0,"")
  936.         IF sz$ = "BACK" THEN
  937.                     ConfirmUserInfo% = 0
  938.         ELSEIF sz$ = "CONTINUE" THEN
  939.                     ConfirmUserInfo% = 1
  940.         ELSE
  941.                     GOTO CONFIRM
  942.         ENDIF
  943.         UIPop 1
  944. END FUNCTION
  945.  
  946.  
  947. SUB ShowProductID() STATIC
  948. PRODUCTID:
  949.         sz$ = UIStartDlg(CUIDLL$, PRODUCTIDDLG, "ProductDlgProc", 0,"")
  950.         IF sz$ = "CONTINUE" THEN
  951.                     UIPop 1
  952.                     szProductID$ = GetSymbolValue("ProductTextOut")
  953.         ELSE
  954.                     GOTO PRODUCTID
  955.         ENDIF
  956. END SUB
  957.  
  958. SUB AskEXIT() STATIC
  959. ASKEXIT1:
  960.         sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  961.         IF sz$ = "EXIT" THEN
  962.                     UIPopAll
  963.         ERROR STFQUIT
  964.         ELSEIF sz$ = "REACTIVATE" THEN
  965.                     GOTO ASKEXIT1
  966.         ELSE
  967.                     UIPop 1
  968.         END IF
  969. END SUB
  970.  
  971.  
  972. SUB Welcome() STATIC
  973. WELCOME_LOOP:
  974.         sz$ = UIStartDlg(CUIDLL$, WELCOMEDLG, "FInfoDlgProc", APPHELP, HELPPROC$)
  975.         IF sz$ = "CONTINUE" THEN
  976.                     UIPop 1
  977.         ELSE
  978.                     AskEXIT
  979.                     GOTO WELCOME_LOOP
  980.         END IF
  981. END SUB
  982.  
  983.  
  984. SUB Toobig() STATIC
  985. TOOBIG_LOOP:
  986.         sz$ = UIStartDlg(CUIDLL$, TOOBIGDLG, "FInfo0DlgProc", 0, "")
  987.         IF sz$ = "REACTIVATE" THEN
  988.                     GOTO TOOBIG_LOOP
  989.         END IF
  990.         UIPop 1
  991. END SUB
  992.  
  993. SUB BadPath() STATIC
  994. BADPATH_LOOP:
  995.         sz$ = UIStartDlg(CUIDLL$, BADPATHDLG, "FInfo0DlgProc", 0, "")
  996.         IF sz$ = "REACTIVATE" THEN
  997.                     GOTO BADPATH_LOOP
  998.         END IF
  999.         UIPop 1
  1000. END SUB
  1001.  
  1002. SUB GetPath() STATIC
  1003. GETPATH_LOOP:
  1004.         SetSymbolValue "EditTextIn", DEST$
  1005.         SetSymbolValue "EditFocus", "END"
  1006. GETPATHL1:
  1007.         sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  1008.         DEST$ = GetSymbolValue("EditTextOut")
  1009.         IF sz$ = "CONTINUE" THEN
  1010.                     IF IsDirWritable(DEST$) = 0 THEN
  1011.                                 BadPath
  1012.                                 GOTO GETPATHL1
  1013.                     END IF
  1014.                     UIPop 1
  1015.         ELSEIF sz$ = "REACTIVATE" THEN
  1016.                     GOTO GETPATHL1
  1017.         ELSEIF sz$ = "BACK" THEN
  1018.                     GOTO GETPATHL1
  1019.         ELSE
  1020.                     AskEXIT
  1021.                     GOTO GETPATH_LOOP
  1022.         END IF
  1023. END SUB
  1024.  
  1025.  
  1026. SUB RestartDlg() STATIC
  1027. RESTART_DLG:
  1028.         sz$ = UIStartDlg(CUIDLL$, 9000, "FInfo0DlgProc", 0, "")
  1029.         IF sz$ = "REACTIVATE" THEN
  1030.                     GOTO RESTART_DLG
  1031.         END IF
  1032.         UIPop 1
  1033. END SUB
  1034.  
  1035. SUB RestartSystem() STATIC
  1036. RE_BACK:
  1037. ' Check if any files were locked during install.  If the RestartList
  1038. ' is not empty, ExitExecRestart() will restart Windows, cleanup setup
  1039. ' files, and copy over locked files before Windows restarts.
  1040.  
  1041.         j% = RestartListEmpty()
  1042.  
  1043.         IF j% = 0 THEN
  1044. ' ExitExecRestart() only returns if applications refuse to be shutdown.
  1045. ' Win32s is installed but will not operate until Windows is restarted
  1046. ' and the Win32s VxD is loaded.
  1047.                     RestartDlg
  1048.                     j% = ExitExecRestart()
  1049.  
  1050.         ELSE
  1051.                     IF Restart$ = "YES" THEN
  1052. ' If the RestartList list is empty, it is necessary to restart windows
  1053. ' directly.  The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT
  1054. ' in the restart directory.  This program should be exec'd to handle
  1055. ' proper MSSETUP cleanup (temp files) and restart Windows.
  1056.  
  1057.                                 RestartDlg
  1058.                                 j% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  1059.                     ENDIF
  1060.             ENDIF
  1061.  
  1062.         IF j% = 0 THEN
  1063.                     GOTO RE_BACK
  1064.         ENDIF
  1065. END SUB
  1066.  
  1067.  
  1068. FUNCTION GetOptionInstall() STATIC AS INTEGER
  1069. BEGIN:
  1070.         sz$ = UIStartDlg(CUIDLL$, BEGIN, "FInfoDlgProc", APPHELP, HELPPROC$)
  1071.         IF sz$ = "CONTINUE" THEN
  1072.                     ''Install only if it will fit.
  1073.                     RecalcPath(0)
  1074.                     FOR i% = 1 TO 7 STEP 1
  1075.                                     IF GetListItem(BIGLIST$, i%) <> "" THEN
  1076.                                                     Toobig
  1077.                                                     GOTO BEGIN
  1078.                                     END IF
  1079.                     NEXT i%
  1080.                     UIPop 1
  1081.                     GetOptionInstall% = COMPLETESETUP
  1082.         ELSEIF sz$ = "BACK" THEN
  1083.                     UIPop 1
  1084.                     GetOptionInstall% = CUSTOMSETUP
  1085.         ELSEIF sz$ = "CANCEL" THEN
  1086.                     ''Install only if it will fit.
  1087.                     RecalcPath(0)
  1088.                     FOR i% = 1 TO 7 STEP 1
  1089.                                     IF GetListItem(BIGLIST$, i%) <> "" THEN
  1090.                                                     Toobig
  1091.                                                     GOTO BEGIN
  1092.                                     END IF
  1093.                     NEXT i%
  1094.                     UIPop 1
  1095.                     GetOptionInstall% = MINIMUMSETUP
  1096.         ELSE
  1097.                     AskEXIT
  1098.                     GOTO BEGIN
  1099.         END IF
  1100. END FUNCTION
  1101.  
  1102. SUB GetMinimumInstall() STATIC
  1103.         WriteExamples%  = 0
  1104.         WriteW4W%       = 0
  1105.         DBExamples%     = 0
  1106.         DBW4W%          = 0
  1107.         SpreadExamples% = 0
  1108.         SpreadW4W%      = 0
  1109.         FormsExamples%  = 0
  1110.         ToolsSpelling%  = 0
  1111.         ToolsCards%     = 0
  1112. END SUB
  1113.  
  1114. SUB GetCustomInstall() STATIC
  1115.  
  1116.         ReplaceListItem DRIVETEXT$, 7,    DEST$
  1117. CUSTPREINST:
  1118.         RecalcPath(0)
  1119.         SetDriveStatus
  1120.  
  1121. CUSTINST:
  1122.         sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  1123.         IF sz$ = "CONTINUE" THEN
  1124.                         ''Install only if it will fit.
  1125.                         FOR i% = 1 TO 7 STEP 1
  1126.                                         IF GetListItem(BIGLIST$, i%) <> "" THEN
  1127.                                                         Toobig
  1128.                                                         GOTO CUSTINST
  1129.                                         END IF
  1130.                         NEXT i%
  1131.                         UIPop 1
  1132.         ELSEIF sz$ = "PATH" THEN
  1133.                         GetPath
  1134.                         ReplaceListItem DRIVETEXT$                      , 7,    DEST$
  1135.                         GOTO CUSTPREINST
  1136.         ELSEIF sz$ = "CHK1" THEN
  1137.                         RecalcOptFiles MANAGERFILES
  1138.                         SetDriveStatus
  1139.                         GOTO CUSTINST
  1140.         ELSEIF sz$ = "CHK2" THEN
  1141.                         RecalcOptFiles WRITEFILES
  1142.                         SetDriveStatus
  1143.                         GOTO CUSTINST
  1144.         ELSEIF sz$ = "CHK3" THEN
  1145.                         RecalcOptFiles DBFILES
  1146.                         SetDriveStatus
  1147.                         GOTO CUSTINST
  1148.         ELSEIF sz$ = "CHK4" THEN
  1149.                         RecalcOptFiles SPREADFILES
  1150.                         SetDriveStatus
  1151.                         GOTO CUSTINST
  1152.         ELSEIF sz$ = "CHK5" THEN
  1153.                         RecalcOptFiles FORMSFILES
  1154.                         SetDriveStatus
  1155.                         GOTO CUSTINST
  1156.         ELSEIF sz$ = "CHK6" THEN
  1157.                         RecalcOptFiles COMMSFILES
  1158.                         SetDriveStatus
  1159.                         GOTO CUSTINST
  1160.         ELSEIF sz$ = "CHK7" THEN
  1161.                         RecalcOptFiles TOOLSFILES
  1162.                         SetDriveStatus
  1163.                         GOTO CUSTINST
  1164.         ELSEIF sz$ = "BTN1" THEN
  1165.                         GetItemsInstall(MANAGERFILES)
  1166.                         GOTO CUSTPREINST
  1167.         ELSEIF sz$ = "BTN2" THEN
  1168.                         GetItemsInstall(WRITEFILES)
  1169.                         GOTO CUSTPREINST
  1170.         ELSEIF sz$ = "BTN3" THEN
  1171.                         GetItemsInstall(DBFILES)
  1172.                         GOTO CUSTPREINST
  1173.         ELSEIF sz$ = "BTN4" THEN
  1174.                         GetItemsInstall(SPREADFILES)
  1175.                         GOTO CUSTPREINST
  1176.         ELSEIF sz$ = "BTN5" THEN
  1177.                         GetItemsInstall(FORMSFILES)
  1178.                         GOTO CUSTPREINST
  1179.         ELSEIF sz$ = "BTN6" THEN
  1180.                         GetItemsInstall(COMMSFILES)
  1181.                         GOTO CUSTPREINST
  1182.         ELSEIF sz$ = "BTN7" THEN
  1183.                         GetItemsInstall(TOOLSFILES)
  1184.                         GOTO CUSTPREINST
  1185.         ELSEIF sz$ = "REACTIVATE" THEN
  1186.                         RecalcPath(0)
  1187.                         SetDriveStatus
  1188.                         GOTO CUSTINST
  1189.         ELSE
  1190.                         AskEXIT
  1191.                         GOTO CUSTINST
  1192.         END IF
  1193.  
  1194. END SUB
  1195.  
  1196.  
  1197. SUB GetItemsInstall(ftype%) STATIC
  1198.     IF ftype% = MANAGERFILES THEN
  1199.                     CURRENTMODULE% = MANAGERFILES
  1200.                     InitCustInstall
  1201.     ELSEIF ftype% =  WRITEFILES THEN
  1202.                     CURRENTMODULE% = WRITEFILES
  1203.                     IF WriteExamples% = 1 THEN
  1204.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,"ON"
  1205.                     ELSE
  1206.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,""
  1207.                     END IF
  1208.                     IF WriteW4W% = 1 THEN
  1209.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,"ON"
  1210.                     ELSE
  1211.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,""
  1212.                     END IF
  1213.                     InitCustInstall
  1214.     ELSEIF ftype% =  DBFILES THEN
  1215.                     CURRENTMODULE% = DBFILES
  1216.                     IF DBExamples% = 1 THEN
  1217.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,"ON"
  1218.                     ELSE
  1219.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,""
  1220.                     END IF
  1221.                     IF DBW4W% = 1 THEN
  1222.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,"ON"
  1223.                     ELSE
  1224.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,""
  1225.                     END IF
  1226.                     InitCustInstall
  1227.     ELSEIF ftype% =  SPREADFILES THEN
  1228.                     CURRENTMODULE% = SPREADFILES
  1229.                     IF SpreadExamples% = 1 THEN
  1230.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,"ON"
  1231.                     ELSE
  1232.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,""
  1233.                     END IF
  1234.                     IF SpreadW4W% = 1 THEN
  1235.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,"ON"
  1236.                     ELSE
  1237.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,""
  1238.                     END IF
  1239.                     InitCustInstall
  1240.     ELSEIF ftype% =  FORMSFILES THEN
  1241.                     CURRENTMODULE% = FORMSFILES
  1242.                     IF FormsExamples% = 1 THEN
  1243.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,"ON"
  1244.                     ELSE
  1245.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,""
  1246.                     END IF
  1247.                     IF FormsExamples% = 1 THEN
  1248.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,"ON"
  1249.                     ELSE
  1250.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,""
  1251.                     END IF
  1252.                     InitCustInstall
  1253.     ELSEIF ftype% =  COMMSFILES THEN
  1254.                     CURRENTMODULE% = COMMSFILES
  1255.                     InitCustInstall
  1256.     ELSEIF ftype% =  TOOLSFILES THEN
  1257.                     CURRENTMODULE% = TOOLSFILES
  1258.                     IF ToolsSpelling% = 1 THEN
  1259.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,"ON"
  1260.                     ELSE
  1261.                                 ReplaceListItem CHECKSTATES1$,EXAMPLESFILES,""
  1262.                     END IF
  1263.                     IF ToolsCards% = 1 THEN
  1264.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,"ON"
  1265.                     ELSE
  1266.                                 ReplaceListItem CHECKSTATES1$,FILTERSFILES,""
  1267.                     END IF
  1268.                     InitCustInstall
  1269.     END IF
  1270.  
  1271.     ShowItemsInstall
  1272.  
  1273. END SUB
  1274.  
  1275. SUB ShowItemsInstall() STATIC
  1276.  
  1277. SETOPTIONSFILES:
  1278.         IF CURRENTMODULE% = TOOLSFILES THEN
  1279.                             sz$ = UIStartDlg(CUIDLL$, TOOLSOPTIONS, "FCustInstDlgProc1", APPHELP, HELPPROC$)
  1280.         ELSE
  1281.                             sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FCustInstDlgProc1", APPHELP, HELPPROC$)
  1282.         ENDIF
  1283.         IF sz$ = "CONTINUE" THEN
  1284.                     ''Install only if it will fit.
  1285.                     FOR i% = 1 TO 2 STEP 1
  1286.                                     IF GetListItem(BIGLIST1$, i%) <> "" THEN
  1287.                                                     Toobig
  1288.                                                     GOTO SETOPTIONSFILES
  1289.                                     END IF
  1290.                     NEXT i%
  1291.                     UIPop 1
  1292.         ELSEIF sz$ = "PATH" THEN
  1293.                     GetPath
  1294.         ELSEIF sz$ = "CHK1" THEN
  1295.                     CheckOptFiles   EXAMPLESFILES
  1296.                     RecalcOptFiles1 EXAMPLESFILES
  1297.                     SetDriveStatus1
  1298.                     GOTO SETOPTIONSFILES
  1299.         ELSEIF sz$ = "CHK2" THEN
  1300.                     CheckOptFiles   FILTERSFILES
  1301.                     RecalcOptFiles1 FILTERSFILES
  1302.                     SetDriveStatus1
  1303.                     GOTO SETOPTIONSFILES
  1304.         ELSEIF sz$ = "REACTIVATE" THEN
  1305.                     RecalcPath(1)
  1306.                     SetDriveStatus1
  1307.                     GOTO SETOPTIONSFILES
  1308.         ELSE
  1309.                     AskEXIT
  1310.                     GOTO SETOPTIONSFILES
  1311.         END IF
  1312. END SUB
  1313.  
  1314. SUB CheckSystem() STATIC
  1315. ''                        Check for Windows Drive
  1316.  
  1317.         WinDrive$ = MID$(GetWindowsDir, 1, 1)
  1318.         IF IsDriveValid(WinDrive$) = 0 THEN
  1319.                 i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.",SETUP_MSG$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1320.                 UIPopAll
  1321.                 ERROR STFQUIT
  1322.         END IF
  1323. ''                        Check for Windows Version
  1324.         IF GetWindowsMajorVersion() < 3 THEN
  1325.                 i% = DoMsgBox("Ability for Windows required Windows 3.1 version.",SETUP_MSG$,MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1326.                 UIPopAll
  1327.                 ERROR STFQUIT
  1328.         END IF
  1329.         IF GetWindowsMinorVersion() < 10 THEN
  1330.                     i% = DoMsgBox("Ability for Windows required Windows 3.1 version.",SETUP_MSG$,MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1331.                     UIPopAll
  1332.                     ERROR STFQUIT
  1333.         END IF
  1334.         IF GetWindowsMinorVersion() > 10 THEN
  1335.                     Check% = 0
  1336.     ELSE
  1337.                     Check% = 1
  1338.     END IF
  1339.  
  1340. END SUB
  1341.  
  1342.  
  1343. SUB FQuit() STATIC
  1344.         IF ERR = 0 THEN
  1345.                 dlg% = EXITSUCCESS
  1346.         ELSEIF ERR = STFQUIT THEN
  1347.                 dlg% = EXITQUIT
  1348.         ELSE
  1349.                 dlg% = EXITFAILURE
  1350.         END IF
  1351. QUITL1:
  1352.         sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  1353.         IF sz$ = "REACTIVATE" THEN
  1354.                 GOTO QUITL1
  1355.         END IF
  1356.         UIPop 1
  1357. END SUB
  1358.  
  1359. SUB InitData() STATIC
  1360.     OPTCUR$                                                         = "1"
  1361.     DEST$                                                                           = "C:\ABILITY"
  1362.     WriteExamples%  = 1
  1363.     WriteW4W%       = 1
  1364.     DBExamples%     = 1
  1365.     DBW4W%          = 1
  1366.     SpreadExamples% = 1
  1367.     SpreadW4W%      = 1
  1368.     FormsExamples%  = 1
  1369.     ToolsSpelling%  = 1
  1370.     ToolsCards%     = 1
  1371.     WINDIRECTORY$           = GetWindowsDir()
  1372.  
  1373.     AddListItem CONFIRMTEXTLIST$,szUserName$
  1374.     AddListItem CONFIRMTEXTLIST$,szCompany$
  1375.  
  1376.     FOR i% = 1 TO 8 STEP 1
  1377.                         AddListItem CHECKSTATES$, "ON"
  1378.                         AddListItem STATUSTEXT$ , ""
  1379.                         AddListItem DRIVETEXT$          , ""
  1380.                         AddListItem BIGLIST$                            , ""
  1381.     NEXT i%
  1382.     ReplaceListItem DRIVETEXT$                      , 7,    DEST$
  1383.     FOR i% = 1 TO 26 STEP 1
  1384.                         AddListItem EXTRACOSTS$ ,"0"
  1385.     NEXT i%
  1386.     FOR i% = 1 TO 2 STEP 1
  1387.                         AddListItem CHECKSTATES1$, "ON"
  1388.                         AddListItem BIGLIST1$                           , ""
  1389.                         AddListItem STATUSTEXT1$        , ""
  1390.     NEXT i%
  1391.     FOR i% = 1 TO 7 STEP 1
  1392.                         AddListItem DRIVETEXT1$         , ""
  1393.     NEXT i%
  1394.     ReplaceListItem DRIVETEXT1$                     , 7, DEST$
  1395.     FOR i% = 1 TO 26 STEP 1
  1396.                         AddListItem EXTRACOSTS1$        , "0"
  1397.     NEXT i%
  1398. END SUB
  1399.  
  1400. SUB UpdateAbilityIni() STATIC
  1401.     wrFile$         = MakePath(DEST$, "ABWRITE.EXE")
  1402.     dbFile$         = MakePath(DEST$, "ABDATA.EXE")
  1403.     ssFile$         = MakePath(DEST$, "ABSPREAD.EXE")
  1404.     chFile$         = MakePath(DEST$, "ABSPREAD.EXE")
  1405.     fmFile$         = MakePath(DEST$, "ABFORMS.EXE")
  1406.     drFile$         = MakePath(DEST$, "ABDRAW.EXE")
  1407.     tmFile$  = MakePath(DEST$, "ABCOMMS.EXE")
  1408.     lbFile$  = MakePath(DEST$, "ABILITY.EXE")
  1409.     AblFile$ = MakePath(DEST$, "ABILITY.INI")
  1410.     CreateIniKeyValue AblFile$,"Write","commandline",wrFile$,cmoOverwrite
  1411.     CreateIniKeyValue AblFile$,"DataBase","commandline",dbFile$,cmoOverwrite
  1412.     CreateIniKeyValue AblFile$,"DataBase","location",DEST$+"\ABILITY.ADB",cmoOverwrite
  1413.     CreateIniKeyValue AblFile$,"SpreadSheet","commandline",ssFile$,cmoOverwrite
  1414.     CreateIniKeyValue AblFile$,"Chart","commandline",ssFile$,cmoOverwrite
  1415.     CreateIniKeyValue AblFile$,"Forms","commandline",fmFile$,cmoOverwrite
  1416.     CreateIniKeyValue AblFile$,"Comms","commandline",tmFile$,cmoOverwrite
  1417.     CreateIniKeyValue AblFile$,"Draw","commandline",drFile$,cmoOverwrite
  1418.     CreateIniKeyValue AblFile$,"Library","commandline",lbFile$,cmoOverwrite
  1419.     CreateIniKeyValue AblFile$,"DefaultSettings","WritePath",DEST$+"\DOCS\",cmoOverwrite
  1420.     CreateIniKeyValue AblFile$,"DefaultSettings","DatabasePath",DEST$+"\",cmoOverwrite
  1421.     CreateIniKeyValue AblFile$,"DefaultSettings","SpreadsheetPath",DEST$+"\SHEETS\",cmoOverwrite
  1422.     CreateIniKeyValue AblFile$,"DefaultSettings","ChartPath",DEST$+"\SHEETS\",cmoOverwrite
  1423.     CreateIniKeyValue AblFile$,"DefaultSettings","FormsPath",DEST$+"\FORMS\",cmoOverwrite
  1424.     CreateIniKeyValue AblFile$,"DefaultSettings","CommsPath",DEST$+"\",cmoOverwrite
  1425.     CreateIniKeyValue AblFile$,"DefaultSettings","DrawPath",DEST$+"\FORMS\",cmoOverwrite
  1426.     CreateIniKeyValue AblFile$,"DefaultSettings","OtherPath",DEST$+"\",cmoOverwrite
  1427.  
  1428. '$IFDEF UK
  1429.     CreateIniKeyValue AblFile$,"Languages","1","0",cmoOverwrite
  1430.     CreateIniKeyValue AblFile$,"Languages","2","1",cmoOverwrite
  1431. '$ELSE
  1432.     CreateIniKeyValue AblFile$,"Languages","1","1",cmoOverwrite
  1433.     CreateIniKeyValue AblFile$,"Languages","2","0",cmoOverwrite
  1434. '$ENDIF
  1435.  
  1436.     CreateIniKeyValue DEST$+"\QTUTOR\QT.INI","QTUTOR","Path",DEST$+"\QTUTOR",cmoOverwrite
  1437.  
  1438. END SUB
  1439.  
  1440.  
  1441. SUB UpdateCommsIni() STATIC
  1442.     CommsFile$ = MakePath(WINDIRECTORY$, "COMM.INI")
  1443.     CreateIniKeyValue CommsFile$,"Modem","UploadDir",DEST$,cmoOverwrite
  1444.     CreateIniKeyValue CommsFile$,"Modem","DownloadDir",DEST$,cmoOverwrite
  1445. END SUB
  1446.  
  1447.  
  1448. SUB UpdateWinIni() STATIC
  1449.     WinIniFile$ = MakePath(GetWindowsDir(),"WIN.INI")
  1450.     RegFile$ = MakePath(DEST$,"ABSPREAD.EXE")
  1451.     CreateIniKeyValue WinIniFile$,"Extensions","AWS",RegFile$+" ^.AWS",cmoOverwrite
  1452.     CreateIniKeyValue WinIniFile$,"Extensions","AWC",RegFile$+" ^.AWC",cmoOverwrite
  1453.     RegFile$ = MakePath(DEST$,"ABWRITE.EXE")
  1454.     CreateIniKeyValue WinIniFile$,"Extensions","AWW",RegFile$+" ^.AWW",cmoOverwrite
  1455.     RegFile$ = MakePath(DEST$,"ABDATA.EXE")
  1456.     CreateIniKeyValue WinIniFile$,"Extensions","AWD",RegFile$+" ^.AWD",cmoOverwrite
  1457.     RegFile$ = MakePath(DEST$,"ABDRAW.EXE")
  1458.     CreateIniKeyValue WinIniFile$,"Extensions","AWG",RegFile$+" ^.AWG",cmoOverwrite
  1459.     CreateIniKeyValue WinIniFile$,"Extensions","BMP",RegFile$+" ^.BMP",cmoOverwrite
  1460.     CreateIniKeyValue WinIniFile$,"Extensions","PCX",RegFile$+" ^.PCX",cmoOverwrite
  1461.     CreateIniKeyValue WinIniFile$,"Extensions","WMF",RegFile$+" ^.WMF",cmoOverwrite
  1462.     CreateIniKeyValue WinIniFile$,"Extensions","TIF",RegFile$+" ^.TIF",cmoOverwrite
  1463.     CreateIniKeyValue WinIniFile$,"Extensions","GIF",RegFile$+" ^.GIF",cmoOverwrite
  1464.     CreateIniKeyValue WinIniFile$,"Extensions","TGA",RegFile$+" ^.TGA",cmoOverwrite
  1465. END SUB
  1466.  
  1467.  
  1468. SUB CreateProgman() STATIC
  1469.         AbilityOffice$ = "Ability Office"
  1470.         CreateProgmanGroup AbilityOffice$, "", cmoNone
  1471.         ShowProgmanGroup   AbilityOffice$, 1 , cmoNone
  1472.  
  1473.         IF GetListItem(CHECKSTATES$, MANAGERFILES) = "ON" THEN
  1474.                     CreateProgmanItem AbilityOffice$, "Ability Manager", MakePath(DEST$,"ability.exe"), "", cmoOverwrite
  1475.         ENDIF
  1476.         IF GetListItem(CHECKSTATES$, WRITEFILES) = "ON" THEN
  1477.                     CreateProgmanItem AbilityOffice$, "Ability Write", MakePath(DEST$,"abwrite.exe"), "", cmoOverwrite
  1478.         ENDIF
  1479.         IF GetListItem(CHECKSTATES$, DBFILES) = "ON" THEN
  1480.                     CreateProgmanItem AbilityOffice$, "Ability Database", MakePath(DEST$,"abdata.exe"), "", cmoOverwrite
  1481.         ENDIF
  1482.         IF GetListItem(CHECKSTATES$, FORMSFILES) = "ON" THEN
  1483.                     CreateProgmanItem AbilityOffice$, "Ability Forms", MakePath(DEST$,"abforms.exe"), "", cmoOverwrite
  1484.                     CreateProgmanItem AbilityOffice$, "Ability Draw", MakePath(DEST$,"abdraw.exe"), "", cmoOverwrite
  1485.         ENDIF
  1486.         IF GetListItem(CHECKSTATES$, SPREADFILES) = "ON" THEN
  1487.                     CreateProgmanItem AbilityOffice$, "Ability Spreadsheet", MakePath(DEST$,"abspread.exe"), "", cmoOverwrite
  1488.                     CreateProgmanItem AbilityOffice$, "Ability Chart", MakePath(DEST$,"abspread.exe /g"),MakePath(DEST$,"abspread.exe")+",1,,,,", cmoOverwrite
  1489.         ENDIF
  1490.         IF GetListItem(CHECKSTATES$, COMMSFILES) = "ON" THEN
  1491.                     CreateProgmanItem AbilityOffice$, "Ability Communicate", MakePath(DEST$,"abcomms.exe"), "", cmoOverwrite
  1492.         ENDIF
  1493.                     CreateProgmanItem AbilityOffice$, "Ability Help", "winhelp.exe "+ MakePath(DEST$,"a4w.hlp"), ",,,,"+DEST$, cmoOverwrite
  1494.         IF GetListItem(CHECKSTATES$, TOOLSFILES) = "ON" THEN
  1495.                     IF ToolsCards% = 1 THEN
  1496.                                 CreateProgmanItem AbilityOffice$, "QuickTutors", MakePath(DEST$+"\QTUTOR","qtutor.exe -q=t -w=0 -m=abqtutor.mas -i=0"), "", cmoOverwrite
  1497.                     END IF
  1498.         ENDIF
  1499.  
  1500. END SUB
  1501.  
  1502.  
  1503. SUB AddToBillboard() STATIC
  1504.         lTicks& = 1
  1505.         AddToBillboardList CUIDLL$,7000,FMODELESSDLGPROC$,lTicks&
  1506.         AddToBillboardList CUIDLL$,7001,FMODELESSDLGPROC$,lTicks&
  1507.         AddToBillboardList CUIDLL$,7002,FMODELESSDLGPROC$,lTicks&
  1508.         AddToBillboardList CUIDLL$,7003,FMODELESSDLGPROC$,lTicks&
  1509.         AddToBillboardList CUIDLL$,7004,FMODELESSDLGPROC$,lTicks&
  1510.         AddToBillboardList CUIDLL$,7005,FMODELESSDLGPROC$,lTicks&
  1511.         AddToBillboardList CUIDLL$,7006,FMODELESSDLGPROC$,lTicks&
  1512.         AddToBillboardList CUIDLL$,7007,FMODELESSDLGPROC$,lTicks&
  1513. END SUB
  1514.  
  1515. SUB FillCopyList() STATIC
  1516.         AddOptFilesToCopyList APPFILES
  1517.         AddOptFilesToCopyList MANAGERFILES
  1518.         AddOptFilesToCopyList WRITEFILES
  1519.         AddOptFilesToCopyList DBFILES
  1520.         AddOptFilesToCopyList SPREADFILES
  1521.         AddOptFilesToCopyList FORMSFILES
  1522.         AddOptFilesToCopyList COMMSFILES
  1523.         AddOptFilesToCopyList TOOLSFILES
  1524.         AddOptFilesToCopyList SYSTEMFILES
  1525. END SUB
  1526.  
  1527.